Harun Bayraktar, Director of Engineering
Roman Dubtsov, Principal Engineer
Samuel Rodriguez Bernabeu, Senior Engineer
GTC Spring 2023 | S51176
支持8位浮点数 (FP8) 和动态编程 (DPX)。
8位浮点数 (FP8) 类型和转换 从 CUDA Toolkit 11.8 开始可用:
cuda_fp8.h 头文件中。_nv_fp8_e4m3、_nv_fp8_e5m2、_nv_fp8x2_e4m3、_nv_fp8x2_e5m2、_nv_fp8x4_e4m3、_nv_fp8x4_e5m2。动态编程 (DPX) 指令 从 CUDA Toolkit 12.0 开始可用:
* 用于标量和打包整数类型的融合算术运算。
* 3路最大值 + ReLU:max(max(max(a, b), c), 0) - _vimax3_s32_relu。
* 融合加法 + 最大值:max(a + b, c) - _viaddmax_u32。
* 加速基因组算法。
图示:Smith and Waterman 性能对比。H100 (DPX) 相较于 A100 (INT32) 实现了 7.8X 的加速。
CUDA 12.0 更新:
* 稀疏三角求解器改进:
* 预处理快 2.5X。
* 单 RHS (SpSV) 执行快 1.1X。
* 多 RHS (SpSM) 执行快 3.0X。
CUDA 12.1 更新:
* 引入了原地 SpSV & SpSM。
* SDDMM (稠密矩阵乘稀疏矩阵输出的稠密矩阵乘积) 性能改进。
CUDA 12.1 之后的规划:
* SpSV 将支持修改矩阵的非零元素,无需新的分析阶段。
* 支持用于 SpMV 和 SpSV 的 ELLPACK 格式 (针对“模板矩阵”)。
* 分块压缩稀疏行 (CSR) SDDMM。
图示:一个稀疏矩阵的可视化,展示了其大部分元素为零。
cuSPARSE SpGEMM (稀疏乘稀疏矩阵乘法) 具有更低的内存要求
CUDA Toolkit 12.0 发布的新功能:
* 以前的算法存在限制,阻碍了在某些情况下的采用(旧算法已移除:不支持转置,性能低下)。
* ALG1 随 CTK 11 引入,但有内存上限要求。
* 新增两种算法以降低内存要求:
* ALG2:严格内存边界。
* ALG3:可调内存边界。
* 适用于所有 GPU。
图示:左侧为内存缩减与传统实现的对比,右侧为性能提升与传统实现的对比。图下方为稀疏矩阵乘法的可视化示例。
cuSPARSE BSR - 用于稀疏 Transformer 的分块压缩稀疏行 (CSR) SDDMM
SDDMM (又称受限 GEMM):
CSR 格式在 CUDA 12.0 中进行了优化。
图示:左侧为 SDDMM BSR 与 CSR 格式性能对比图,显示 BSR 随块大小增加而性能优于 CSR。右侧为稠密稠密矩阵乘法示例图,用于可视化稀疏与稠密矩阵。
CUDA 12.1 更新:
* 稠密线性代数核心函数。
* 专注于 H100 优化。
* Cholesky 和 SYEVD 的新实现显著提高了性能。
即将发布:
* QR 分解的进一步优化。
图示:H100 相较于 A100 的稠密线性代数例程性能改进,涵盖 Cholesky (DPOTRF)、LU (DGETRF)、QR (DGEQRF) 和对称特征值求解器 (DSYEVD) 等,随着矩阵尺寸的增大,H100 展现出显著的加速。
nvJPEG:
* 支持 jpeg 无损 (过程 14,一阶预测)。
* 将在即将发布的 CUDA 版本和 DALI 1.23 中提供。
* 基于软件的编码/解码现已在 L4T (Jetson) 上可用。
nvJPEG2000:
* 高吞吐量 JPEG2000 解码。
* v0.7 版本已于 2023 年 3 月发布。
未来几个月的计划:
* nvTIFF 中支持 geoTIFF。
* nvPNG 将于 2023 年晚些时候提供。
相关演讲:
* S51182:克服基于 AI 的图像和计算机视觉管线中的预处理和后处理瓶颈。
* S51286:基于 CUDA 的 PNG 图像编码器和解码器加速。
图示:nvJPEG 硬件解码吞吐量对比。对于 4K UHD 图像,H100 (80GB) 相较于 A100 (40GB) 提供了 1.6X 的吞吐量提升。
图示:从第一代 (GV100) 到第四代 (GH100) Tensor Core 性能的逐代提升,针对 FP64、TF32、FP16/BF16、INT8 和 FP8 等不同精度。可以看到,FP8 在 GH100 上达到了 2141 TFLOPS 的峰值性能。
图示:Tensor Core 可编程性软件栈,从底层直接可编程性(如 mma.async)到顶层主机 API 库(如 cuBLAS/Lt、cuTENSOR),展示了不同抽象级别的组件。Dx 库能够融合 NVIDIA 优化库功能和用户代码。
(1) 简化图示目的。库在某些情况下使用其他内核源。
(2) 未来版本。
(3) https://developer.nvidia.com/math/cutlass
(4) https://github.com/NVIDIA/cutlass
| Library | Kernel selection heuristics | Multi-GPU support | Host API | Device API |
|---|---|---|---|---|
| cuBLAS | via cuBLASLt | - | ✅ | - |
| cuBLASLt | Full | - | ✅ | - |
| cuBLASXt | via cuBLAS | ✅ | ✅ | - |
| cuBLASDx | Partial | - | - | ✅ |
| CUTLASS | None | - | ✅ | ✅ |
表:cuBLAS 家族各组件特性概览。
(1) 最新 cuBLAS 博客文章。
(2) S51413 - 在 Hopper Tensor Cores 上开发最优 CUDA 内核。
图示:NVIDIA H100 GPU 上的 cuBLAS 性能亮点,对比了 V100、A100、H100-PCI 和 H100-SXM 在不同精度(INT8、FP16->FP16、FP16->FP32、BF16->FP32*、TF32、FP64)下的加速比。H100-SXM 在 FP16->FP16 方面显示出最高达 8.9 倍的加速。
*FP->FP16 和 FP32->BF16 的比率差异是由于不同的基准。这些数据类型的性能在标称条件下是相同的。
图示:左侧为不同浮点精度(FP32、FP16、BF16、FP8)的范围、指数和尾数表示。右侧为 cuBLASLt 中 FP8 支持的计算流程,包括矩阵乘法、去量化、epilogue 和量化步骤,并展示了如何融合这些操作。
本页展示了 cuBLAS FP8 在 NVIDIA H100 和 L4 GPU 上的性能亮点,主要关注矩阵乘法部分(matmul)。
GPT-3 175B 训练矩阵乘法时间加速
- BF16:
- A100: 1.0 倍基准
- H100-PCI: 1.7 倍
- H100-SXM: 2.5 倍
BERT Large 推理 (预览)
FP16:
FP8:
数据是基于一系列批次大小和平均序列长度计算的。
本页介绍了 cuBLAS 的质量改进,旨在减少开销并使 API 面向未来。
启发式结果缓存:
cuBLAS 的 64 位整数接口:
页面展示了从使用 int 类型到使用 int64_t 类型作为参数的 cublasDtrum_v2 函数原型示例,体现了 64 位接口的改变。
本页介绍了多 GPU 多节点 (MGMN) 库,旨在推动大规模科学研究。
它列举了利用这些库的典型应用和工具:
本页介绍了 NVIDIA HPC-SDK,它已准备好部署 MGMN 库。
NVIDIA HPC-SDK 结构:
- 开发 (DEVELOPMENT):
- 编程模型: Standard C++ & Fortran, OpenACC & OpenMP, CUDA。
- 编译器: nvc, nvc++, nvfortran。
- 核心库: libcu++, Thrust, CUB。
- 数学库: cuBLAS, cuTENSOR, cuSPARSE, cuSOLVER, cuFFT, cuRAND。
- 通信库: HPC-X (MPI, UCX, SHMEM, SHARP, HCOLL, NVSHMEM), NCCL。
重点突出:
cuSOLVERMp:
cuFFTMp:
本页展示了分布式对称特征值求解器的最新性能。
弱扩展性对比 (PSYEEVD vs ELPA):
ELPA 和 cuSOLVERMp 在不同 GPU 数量下的性能。cuSOLVERMp 相较于 ELPA 实现了 1.35 倍的加速。代码示例:
页面左侧提供了 SCALAPACK 和 cuSOLVERMp 的代码片段,展示了调用分布式特征值求解器的 API。
本页展示了 cuSOLVERMp 与 VASP 结合如何加速量子化学计算。
PZHEEVD 用于 VASP-BSE 用例的运行时:
- 图表比较了 ELPA1 和 cuSOLVERMp 在不同 GPU 核心配置下的运行时。
- 在 40x25 配置,1000 个 GPU 上,cuSOLVERMp 相较于 ELPA1 实现了 1.43 倍的加速。
- 性能测量基于 NVIDIA A100 DGX Super POD,使用双精度 (fp64) 复数输入矩阵。
本页展示了 cuFFTMp 与 GROMACS 结合如何加速分子动力学模拟。
STMV 强扩展性 (1M 原子):
- 图表显示,随着节点数量从 1 增加到 16 (每个节点 4 个 A100 GPU),使用 GPU direct comm 的 PME decomp & GPU direct comm 模式相对于 No PME decomp or GPU direct comm 模式,GROMACS 的性能 (ns/天) 显著提升。
BenchPEP-h 强扩展性 (12M 原子):
- 图表显示,随着节点数量从 1 增加到 64 (每个节点 4 个 A100 GPU),GPU direct comm 和 PME decomp & GPU direct comm 模式的性能 (ns/天) 均显著优于 No PME decomp or GPU direct comm 模式,在 64 个节点时性能达到最高。
- 性能测量基于 NVIDIA A100 DGX Super POD。
本页展示了 cuFFTMp 与 JAX 结合,如何实现新的 Python 工作流。
3D 2048³ fp32 强扩展性:
- 图表比较了 JAX+cufft、JAX+cuFFTMp 和 cuFFTMp 在不同 GPU 数量下的时间 (毫秒)。
- 随着 GPU 数量的增加,cuFFTMp (纯库) 的性能最佳,JAX+cuFFTMp 也表现出优于 JAX+cufft 的良好扩展性,特别是在 16 到 128 个 GPU 范围内。
- 性能测量基于 NVIDIA A100 DGX Super POD。
本页介绍了 cuSOLVERMp 和 cuFFTMp 的未来性能、功能和更多计划。
cuSOLVERMp:
- 与 HPC SDK 23.1 相比,性能有所提升。
- 即将推出:
- 通用特征求解器 (PSYGVD)。
- 支持 Hopper 架构。
cuSOLVERMp 在各种问题规模 (2560, 5120, 10240, 20480) 上,相比 HPC SDK 23.1 版本,实现了显著的加速,最高可达 15 倍。cuFFTMp:
本页介绍了 cuBLASDx:内联矩阵乘法。
cuBLASDx: 在 MathDx 中
https://developer.nvidia.com/mathdx 获取更多信息。cuBLASDx 初步性能:
- 图表比较了 cuBLAS 和 cuBLASDx 在不同平方尺寸下的 GFLOPS 性能。
- cuBLASDx 在所有尺寸下均显示出优于 cuBLAS 的性能,例如在尺寸 144 时,cuBLASDx 达到 1,168 GFLOPS,而 cuBLAS 为 833 GFLOPS。
- 性能测量基于 A100 @ Max Clocks。
本页介绍了 NVIDIA 性能库 (NVPL):针对 Arm CPU 优化的数学库。
支持库: BLAS, LAPACK, PBLAS, SCALAPACK, TENSOR, SPARSE, RNG, FFTW。
nvplBLAS DGEMM 效率:
- 图表显示了 nvplBLAS DGEMM 在不同矩阵大小 (m=n=k) 和线程数 (1, 8, 72 线程) 下的效率,最高可达 90% 以上。
NVIDIA Grace Superchip:
- 144 核 Arm Neoverse V2 内核,通过 NVLink-C2C 连接。
- 900 GB/s 双向带宽。
- LPDDR5X ECC,1TB/s 内存带宽。
本页对 NVIDIA 性能库进行了总结。
无缝加速:
可组合性:
NVPL on Arm:
多 GPU & 多节点:
(1) 指即将于 2023 年发布的早期访问版本。